$NG.AllReady(function (page, { useDataIndexChange, useUpdateRow, useUpdateRows, useBeforeClick, useValuesChange }) {
    console.log("Data ready event triggered");
    //获取容器
    var mstform = $NG.getCmpApi("p_form_Subcontracting_Plan");
    var dgrid = $NG.getCmpApi("p_form_Subcontracting_Plan_d"); //获取表体数据
  
    const gridToolbar = $NG.getCmpApi("toolbar_p_form_Subcontracting_Plan_d");
    gridToolbar.getItem("imp").setProps({ children: "引用设备清单拟分包明细" });
    ////////////////////////////////////////////////////////////--mstform--////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////--mstform--////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////--mstform--////////////////////////////////////////////////////////////
    if (mstform) {
      console.log("mstform is reayd");
      useValuesChange(({ args }) => {
        setTitle();
        FilterByPhidPc();
      }, "p_form_Subcontracting_Plan.phid_pc");
      /**监听招标类型字段值 */
      useValuesChange(({ args, form }) => {
        isRead();
        $NG.updateState((updater) => {
          updater.data.p_form_Subcontracting_Plan.setProps({
            u_yztjsq: null,
            u_ydj_cnt: null,
          });
        });
        dgrid.clearRows();
      }, "p_form_Subcontracting_Plan.u_zb_type");
      useValuesChange(({ args }) => {
        dgrid.clearRows();
      }, "p_form_Subcontracting_Plan.u_yztjsq");
      useValuesChange(({ args }) => {
        dgrid.clearRows();
      }, "p_form_Subcontracting_Plan.u_ydj_cnt");
      if (mstform.getItem("u_zb_type").getValue()) {
        isRead();
      }
    }
    ////////////////////////////////////////////////////////////--dgrid--////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////--dgrid--////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////--dgrid--////////////////////////////////////////////////////////////
    if (dgrid) {
      console.log("dgrid is reayd");
      useUpdateRows(({ args }) => {
        dgrid.getRows().forEach((items) => {
          if (!items.u_eq_no) {
            $NG.execServer("getEqSubInfo", { phid_pc:mstform.getItem("phid_pc").getValue() , sub_item: items.u_sub_item }, function (res) {
                console.log(`res`,res);
              console.log(mstform.getItem("phid_pc").getValue());
              console.log(items.u_sub_item);
              if (res.count > 0) {
                const datas = JSON.parse(res.data)[0].extendObjects;
                items.u_eq_no = datas.u_equipment_list_no;
                items.u_eq_name = datas.phid;
                items.u_eq_name_EXName = datas.u_equipment_list_name;
                items.u_sub_qty = datas.u_sub_qty;
                items.u_nfb_prc = datas.u_sub_prc;
                items.u_nfbhs_prc = datas.u_sub_prc_vat;
                items.u_nfbcbws = datas.u_sub_cost;
                items.u_nfbcbhs = datas.u_sub_cost_vat;
                items.u_sl = datas.u_sub_tax_rate;
              } else {
                console.log("功能扩展没有数据：" + "getEqSubInfo");
              }
            });
          }
        });
        $NG.getCmpApi("p_form_Subcontracting_Plan_d").refreshView();
        console.log(`刷新了`, args[0]);
      }, "p_form_Subcontracting_Plan_d");
    }
  
    function isRead() {
      const type = mstform.getItem("u_zb_type").getValue(); //获取值
      console.log(`类型`, type);
  
      if (type == "01") {
        mstform.setReadOnly("u_yztjsq", false);
        mstform.setRequired("u_yztjsq", false);
        mstform.setReadOnly("u_ydj_cnt", false);
        mstform.setRequired("u_ydj_cnt", false);
  
        mstform.setReadOnly("u_yztjsq"); //只读
        mstform.setRequired("u_ydj_cnt"); //必输
      }
  
      if (type == "02") {
        mstform.setReadOnly("u_yztjsq", false);
        mstform.setRequired("u_yztjsq", false);
        mstform.setReadOnly("u_ydj_cnt", false);
        mstform.setRequired("u_ydj_cnt", false);
  
        mstform.setReadOnly("u_ydj_cnt"); //只读
        mstform.setRequired("u_yztjsq"); //必输
      }
      if (type == "03") {
        console.log(`执行了03`);
        mstform.setReadOnly("u_yztjsq", false);
        mstform.setRequired("u_yztjsq", false);
        mstform.setReadOnly("u_ydj_cnt", false);
        mstform.setRequired("u_ydj_cnt", false);
  
        mstform.setReadOnly("u_ydj_cnt"); //只读
        mstform.setReadOnly("u_yztjsq"); //只读
      }
    }
  
    // 保存钩子
    useBeforeClick(async function ({ args }) {
      //按钮点击前事件
      const _arr = dgrid.getRows();
      const _errArr = [];
      _arr.forEach((item, inde) => {
        const nfb_qty = Number(item.u_sub_qty);
        const nfb_amt = Number(item.u_nfbhs_prc);
        const jh_qty = Number(item.u_plan_qty);
        const jh_amt = Number(item.u_jhhsdj);
        if (nfb_amt * nfb_qty < jh_qty * jh_amt) {
          _errArr.push(inde + 1);
        }
      });
      if (_errArr.length !== 0) {
        const _str = _errArr.join("、");
        console.log(_str, _errArr);
        $NG.alert(`当前有明细中存在计划金额超出限制序号为：${_str}`);
        return false;
      } else {
        return true;
      }
    }, "save");
  
    // 表体当前选中行数据更新---->单个字段更新数据以及编辑事件
    useDataIndexChange(({ args, table }) => {
      // 获取当前行数据
      var gridTab = $NG.getCmpApi("p_form_Subcontracting_Plan_d"); // 获取tab页数据
      var row = args[0];
      console.log(`temp--1`, row);
      // 计算金额：数量 * 单价
      row.u_plan_hs_amt = row.u_plan_qty * row.u_jhhsdj; // 假设 row 中有 u_plan_qty 字段
      // 更新行数据
      gridTab.updateRow(row);
    }, "u_plan_qty"); // 监听 prc 字段的变化
  
    // 表体当前选中行数据更新---->单个字段更新数据以及编辑事件
    // useDataIndexChange(({ args, table }) => {
    //     console.log(222222222222222222222222);
    //     // 获取当前行数据
    //     var gridTab = $NG.getCmpApi('p_form_Subcontracting_Plan_d'); // 获取tab页数据
    //     var row = args[0];
    //     if(Number(row.u_jhhsdj)>Number(row.u_nfbhs_prc)){
    //         $NG.alert("警告：超出拟分包含税单价")
    //         row.u_jhhsdj = null
    //     }
    // }, 'u_jhhsdj',); // 监听 prc 字段的变化
  
    // 表体当前选中行数据更新---->单个字段更新数据以及编辑事件
    useDataIndexChange(({ args, table }) => {
      console.log(222222222222222222222222);
      // 获取当前行数据
      var gridTab = $NG.getCmpApi("p_form_Subcontracting_Plan_d"); // 获取tab页数据
      var row = args[0];
      if (Number(row.u_jhws_prc) > Number(row.u_nfb_prc)) {
        $NG.alert("警告：超出拟分包未税单价");
        row.u_jhws_prc = null;
      }
    }, "u_jhws_prc"); // 监听 prc 字段的变化
  
    // 表体当前选中行数据更新---->单个字段更新数据以及编辑事件
    useDataIndexChange(({ args, table }) => {
      console.log(222222222222222222222222);
      // 获取当前行数据
      var gridTab = $NG.getCmpApi("p_form_Subcontracting_Plan_d"); // 获取tab页数据
      var row = args[0];
      if (Number(row.u_jhws_prc) > Number(row.u_nfb_prc)) {
        $NG.alert("警告：超出拟分包未税单价");
        row.u_jhws_prc = null;
      }
    }, "u_nfb_prc"); // 监听 prc 字段的变化
    // // 表体当前选中行数据更新---->单个字段更新数据以及编辑事件
    useDataIndexChange(({ args, table }) => {
      console.log(222222222222222222222222);
      // 获取当前行数据
      var gridTab = $NG.getCmpApi("p_form_Subcontracting_Plan_d"); // 获取tab页数据
      var row = args[0];
      if (Number(row.u_plan_qty) + (Number(row.u_planned_qty) || 0) > Number(row.u_sub_qty)) {
        $NG.alert("警告：计划数量超出拟分包数量");
        row.u_plan_qty = null;
      }
    }, "u_plan_qty"); // 监听 prc 字段的变化
  
    useDataIndexChange(({ args, table }) => {
      console.log(222222222222222222222222);
      // 获取当前行数据
      var gridTab = $NG.getCmpApi("p_form_Subcontracting_Plan_d"); // 获取tab页数据
      var row = args[0];
      if (Number(row.u_plan_qty) + (Number(row.u_planned_qty) || 0) > Number(row.u_sub_qty)) {
        $NG.alert("警告：计划数量超出拟分包数量");
        row.u_plan_qty = null;
      }
    }, "u_planned_qty"); // 监听 prc 字段的变化
  
    useDataIndexChange(({ args, table }) => {
      // 获取当前行数据
      var gridTab = $NG.getCmpApi("p_form_Subcontracting_Plan_d"); // 获取tab页数据
      var row = args[0];
      // 计算金额：数量 * 单价
      row.u_plan_hs_amt = row.u_plan_qty * row.u_jhhsdj; // 假设 row 中有 u_plan_qty 字段
      // 更新行数据
      gridTab.updateRow(row);
    }, "u_jhhsdj"); // 监听 prc 字段的变化
  
    // 表体当前选中行数据更新---->单个字段更新数据以及编辑事件
    useDataIndexChange(({ args, table }) => {
      // 获取当前行数据
      var gridTab = $NG.getCmpApi("p_form_Subcontracting_Plan_d"); // 获取tab页数据
      var row = args[0];
  
      row.u_jhws_prc = row.u_jhhsdj / Number(1 + Number(row.u_sl)); // 假设 row 中有 u_plan_qty 字段
      // 更新行数据
      gridTab.updateRow(row);
    }, "u_sl"); // 监听 prc 字段的变化
  
    // 表体当前选中行数据更新---->单个字段更新数据以及编辑事件
    useDataIndexChange(({ args, table }) => {
      // 获取当前行数据
      var gridTab = $NG.getCmpApi("p_form_Subcontracting_Plan_d"); // 获取tab页数据
      var row = args[0];
      row.u_jhws_prc = row.u_jhhsdj / Number(1 + Number(row.u_sl));
      // 更新行数据
      gridTab.updateRow(row);
    }, "u_jhhsdj"); // 监听 prc 字段的变化
  
    // 表体当前选中行数据更新---->单个字段更新数据以及编辑事件
    useDataIndexChange(({ args, table }) => {
      // 获取当前行数据
      var gridTab = $NG.getCmpApi("p_form_Subcontracting_Plan_d"); // 获取tab页数据
      var row = args[0];
      row.u_jhhsdj = row.u_jhws_prc * Number(1 + Number(row.u_sl));
      // 更新行数据
      gridTab.updateRow(row);
    }, "u_jhws_prc"); // 监听 prc 字段的变化
  
    // 表体当前选中行数据更新---->单个字段更新数据以及编辑事件
    useDataIndexChange(({ args, table }) => {
      // 获取当前行数据
      var gridTab = $NG.getCmpApi("p_form_Subcontracting_Plan_d"); // 获取tab页数据
      var row = args[0];
      // 计算金额：数量 * 单价
      row.u_plan_ws_amt = (row.u_jhhsdj / Number(1 + Number(row.u_sl))) * row.u_plan_qty; // 假设 row 中有 u_plan_qty 字段
      // 更新行数据
      gridTab.updateRow(row);
    }, "u_jhhsdj"); // 监听 prc 字段的变化
  
    // 表体当前选中行数据更新---->单个字段更新数据以及编辑事件
    useDataIndexChange(({ args, table }) => {
      // 获取当前行数据
      var gridTab = $NG.getCmpApi("p_form_Subcontracting_Plan_d"); // 获取tab页数据
      var row = args[0];
      console.log(`测试监听`, args);
      // 计算金额：数量 * 单价
      row.u_plan_ws_amt = (row.u_jhhsdj / Number(1 + Number(row.u_sl))) * row.u_plan_qty; // 假设 row 中有 u_plan_qty 字段
  
      // 更新行数据
      gridTab.updateRow(row);
    }, "u_plan_qty"); // 监听 prc 字段的变化
  
    // 表体当前选中行数据更新---->单个字段更新数据以及编辑事件
    useDataIndexChange(({ args, table }) => {
      // 获取当前行数据
      var gridTab = $NG.getCmpApi("p_form_Subcontracting_Plan_d"); // 获取tab页数据
      var row = args[0];
      // 计算金额：数量 * 单价
      row.u_plan_ws_amt = (row.u_jhhsdj / Number(1 + Number(row.u_sl))) * row.u_plan_qty; // 假设 row 中有 u_plan_qty 字段
  
      // 更新行数据
      gridTab.updateRow(row);
    }, "u_sl"); // 监听 prc 字段的变化
  
    // 表体当前选中行数据更新---->单个字段更新数据以及编辑事件
    useDataIndexChange(({ args, table }) => {
      // 获取当前行数据
      var gridTab = $NG.getCmpApi("p_form_Subcontracting_Plan_d"); // 获取tab页数据
      var row = args[0];
      // 计算金额：数量 * 单价
      row.u_nfbcbhs = row.u_nfbhs_prc * row.u_plan_qty; // 假设 row 中有 u_plan_qty 字段
      row.u_sy_qty = row.u_plan_qty;
      // 更新行数据
      gridTab.updateRow(row);
    }, "u_plan_qty"); // 监听 prc 字段的变化
  
    // 表体当前选中行数据更新---->单个字段更新数据以及编辑事件
    useDataIndexChange(({ args, table }) => {
      // 获取当前行数据
      var gridTab = $NG.getCmpApi("p_form_Subcontracting_Plan_d"); // 获取tab页数据
      var row = args[0];
      // 计算金额：数量 * 单价
    }, "u_plan_qty"); // 监听 prc 字段的变化
    useUpdateRows(({ args }) => {
      console.log(`增行发生`);
      args[0].forEach((row) => {
        row.u_sy_qty = row.u_plan_qty; // 假设 row 中有 u_plan_qty 字段
      });
      dgrid.refreshView();
    }, "p_form_Subcontracting_Plan_d");
    const toolbar = $NG.getCmpApi("toolbar_top");
    toolbar.getItem("imp").setHidden();
  
    //项目名称变化时自动带入产品线、事业部
    useValuesChange(({ args }) => {
      getProjectInfo();
      console.log(args[0]);
      //const phid_pc = args[0].pc.PhId;
      const phid_pc = args[0].phid_pc.value;
      //从项目取值
      if (phid_pc) {
        console.log(phid_pc);
        //从项目取值
        $NG.execServer("getProjInfo", { pc: phid_pc }, function (res) {
          const data = JSON.parse(res.data);
  
          const pc_no = data[0].extendObjects.bill_no;
          //事业部，产品线
          $NG.updateState((updater) => {
            updater.data.p_form_Subcontracting_Plan.setProps({
              user_pc_no: pc_no,
            });
          });
        });
      }
    }, "p_form_Subcontracting_Plan.phid_pc");
  
    FilterByPhidPc();
    //合同根据项目ID过滤
    function FilterByPhidPc() {
      $NG.updateUI((updater, state) => {
        console.log("过滤参数检查", updater);
        updater.form.p_form_Subcontracting_Plan.u_yztjsq.setProps({
          onBeforeOpen: async () => {
            var phid_pc = $NG.getCmpApi("p_form_Subcontracting_Plan").getItem("phid_pc").getValue();
            if (!phid_pc) {
              $NG.alert("请先选择项目");
              return false;
            } else {
              return true;
            }
          },
          ...(!!$NG.getCmpApi("p_form_Subcontracting_Plan").getItem("phid_pc").getValue() && {
            clientSqlFilter: {
              "a.phid_pc": $NG.getCmpApi("p_form_Subcontracting_Plan").getItem("phid_pc").getValue(),
            },
          }),
        });
      });
      $NG.updateUI((updater, state) => {
        console.log("过滤参数检查", updater);
        updater.form.p_form_Subcontracting_Plan.u_ydj_cnt.setProps({
          onBeforeOpen: async () => {
            var phid_pc = $NG.getCmpApi("p_form_Subcontracting_Plan").getItem("phid_pc").getValue();
            if (!phid_pc) {
              $NG.alert("请先选择项目");
              return false;
            } else {
              return true;
            }
          },
          ...(!!$NG.getCmpApi("p_form_Subcontracting_Plan").getItem("phid_pc").getValue() && {
            clientSqlFilter: {
              "pcm3_cnt_m.phid_pc": $NG.getCmpApi("p_form_Subcontracting_Plan").getItem("phid_pc").getValue(),
            },
          }),
        });
      });
    }
  
    getInDate();
    //根据当前日期获取工作周期
    function getInDate() {
      $NG.execServer("getInDate", {}, function (res) {
        if (res.count !== 0) {
          const _data = JSON.parse(res.data)[0].extendObjects;
          $NG.updateState((updater) => {
            updater.data.p_form_Subcontracting_Plan.setProps({
              phid_cycle: {
                label: _data.bill_name,
                value: _data.phid,
              },
            });
          });
        }
      });
    }
  
    //获取项目信息
    // 获取项目
    getProjectInfo();
    function getProjectInfo(isReturn = false, phid = mstform.getItem("phid_pc").getValue(), fun) {
      if (!phid) {
        return;
      }
      try {
        setTimeout(() => {
          $NG.execServer("getPtInfoByPhid", { phid: phid }, (res) => {
            if (res.count !== 0) {
              const _data = JSON.parse(res.data)[0].extendObjects;
              console.log(`获取项目信息`, _data);
              if (isReturn) {
                fun(_data);
              } else {
                $NG.updateState((updater) => {
                  updater.data.p_form_Subcontracting_Plan.setProps({
                    u_pc_no: _data.pc_no, //项目编码
                  });
                });
              }
            }
          });
        }, 100);
      } catch (err) {
        $NG.alert("获取项目信息发生失败请检查~");
      }
    }
    setTitle();
    function setTitle() {
      if (!mstform.getItem("phid_pc").getValue()) return;
      $NG.execServer("GetZbTime", { phid_pc: mstform.getItem("phid_pc").getValue() }, function (res) {
        if (res.count == 0) {
          $NG.updateState((updater) => {
            updater.data.p_form_Subcontracting_Plan.setProps({
              bill_name: `${mstform.getItem("phid_pc").getText()}第1次招标计划`,
            });
          });
        } else {
          const _data = JSON.parse(res.data)[0].extendObjects;
          $NG.updateState((updater) => {
            updater.data.p_form_Subcontracting_Plan.setProps({
              bill_name: `${mstform.getItem("phid_pc").getText()}第${_data.count + 1}次招标计划`,
            });
          });
        }
      });
    }
  });
  